from application import db, login_manager


# 用户表
class Users(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(512), nullable=False)
    # 手机号为唯一约束
    mobile = db.Column(db.String(128), nullable=False, unique=True)
    password = db.Column(db.String(256), nullable=False)
    # 用户的类型，0表示观众，1表示参赛选手，2表示评委，3表示管理员，默认为0
    user_type = db.Column(db.SmallInteger, default=0)
    # 用户状态0表示禁用，1表示未禁用
    status = db.Column(db.SmallInteger, default=1)
    # 评委票数，每轮评选总票为5
    user_poll = db.Column(db.Integer, default=0)
    # 作品的id，可以为空
    product_id = db.Column(db.Integer, db.ForeignKey('product.id'), nullable=True)


# 作品表
class Product(db.Model):
    __tablename__ = 'product'

    id = db.Column(db.Integer, primary_key=True)
    # 作品的名字
    name = db.Column(db.String(512), nullable=False, unique=True)
    # 作品存放地址
    product_addr = db.Column(db.String(512), nullable=False)
    # 作品上传时间
    upload_time = db.Column(db.DateTime, nullable=False)
    # 作品参赛情况，默认参赛，未晋级就变为0
    status = db.Column(db.SmallInteger, default=1, nullable=False)


# 轮次表
class Game(db.Model):
    __tablename__ = 'game'

    id = db.Column(db.Integer, primary_key=True)
    # 比赛名字
    name = db.Column(db.String(512), nullable=False, unique=True)
    # 本轮评选的状态，1为开启，0为关闭，默认为开启
    status = db.Column(db.SmallInteger, default=1, nullable=False)


# 评分表
class Score(db.Model):
    __tablename__ = 'score'
    # id 为自增字段
    id = db.Column(db.Integer, autoincrement=True, nullable=False, default=1)
    # 轮次id 作品id 两个组合成为联合主键，意思为1轮比赛中相同作品得分的记录只有一条
    game_id = db.Column(db.Integer, db.ForeignKey('game.id'), nullable=False, primary_key=True)
    # 作品id
    product_id = db.Column(db.Integer, db.ForeignKey('product.id'), nullable=False, primary_key=True)
    # 票数得分
    score = db.Column(db.Integer, default=0)


